package dto

import "encoding/json"

// TerminalInfoDto 终端信息DTO
//
// @author liaochangyi
// @since 2025-01-25
type TerminalInfoDto struct {
	NetworkLicense   *string `json:"network_license,omitempty"`    // 银行卡受理终端入网编号
	DeviceType       *string `json:"device_type,omitempty"`        // 设备类型
	SerialNum        *string `json:"serial_num,omitempty"`         // 设备序列号
	EncryptRandNum   *string `json:"encrypt_rand_num,omitempty"`   // 加密随机因子
	SecretText       *string `json:"secret_text,omitempty"`        // 密文数据
	AppVersion       *string `json:"app_version,omitempty"`        // 终端应用版本号
	MobileCountryCd  *string `json:"mobile_country_cd,omitempty"`  // 移动国家代码
	MobileNetworkNum *string `json:"mobile_network_num,omitempty"` // 移动网络号码
	IccId            *string `json:"icc_id,omitempty"`             // ICCID
	LocationCd1      *string `json:"location_cd1,omitempty"`       // 位置区域码 1
	LbsNum1          *string `json:"lbs_num1,omitempty"`           // 基站编号 1
	LbsSignal1       *string `json:"lbs_signal1,omitempty"`        // 基站信号 1
	LocationCd2      *string `json:"location_cd2,omitempty"`       // 位置区域码 2
	LbsNum2          *string `json:"lbs_num2,omitempty"`           // 基站编号 2
	LbsSignal2       *string `json:"lbs_signal2,omitempty"`        // 基站信号 2
	LocationCd3      *string `json:"location_cd3,omitempty"`       // 位置区域码 3
	LbsNum3          *string `json:"lbs_num3,omitempty"`           // 基站编号 3
	LbsSignal3       *string `json:"lbs_signal3,omitempty"`        // 基站信号 3
	TelecomSystemId  *string `json:"telecom_system_id,omitempty"`  // 电信系统识别码
	TelecomNetworkId *string `json:"telecom_network_id,omitempty"` // 电信网络识别码
	TelecomLbs       *string `json:"telecom_lbs,omitempty"`        // 电信基站
	TelecomLbsSignal *string `json:"telecom_lbs_signal,omitempty"` // 电信基站信号
}

// NewTerminalInfoDto 创建新的终端信息DTO实例
func NewTerminalInfoDto() *TerminalInfoDto {
	return &TerminalInfoDto{}
}

// SetNetworkLicense 设置银行卡受理终端入网编号
func (t *TerminalInfoDto) SetNetworkLicense(networkLicense string) *TerminalInfoDto {
	t.NetworkLicense = &networkLicense
	return t
}

// SetDeviceType 设置设备类型
func (t *TerminalInfoDto) SetDeviceType(deviceType string) *TerminalInfoDto {
	t.DeviceType = &deviceType
	return t
}

// SetSerialNum 设置设备序列号
func (t *TerminalInfoDto) SetSerialNum(serialNum string) *TerminalInfoDto {
	t.SerialNum = &serialNum
	return t
}

// SetEncryptRandNum 设置加密随机因子
func (t *TerminalInfoDto) SetEncryptRandNum(encryptRandNum string) *TerminalInfoDto {
	t.EncryptRandNum = &encryptRandNum
	return t
}

// SetSecretText 设置密文数据
func (t *TerminalInfoDto) SetSecretText(secretText string) *TerminalInfoDto {
	t.SecretText = &secretText
	return t
}

// SetAppVersion 设置终端应用版本号
func (t *TerminalInfoDto) SetAppVersion(appVersion string) *TerminalInfoDto {
	t.AppVersion = &appVersion
	return t
}

// SetMobileCountryCd 设置移动国家代码
func (t *TerminalInfoDto) SetMobileCountryCd(mobileCountryCd string) *TerminalInfoDto {
	t.MobileCountryCd = &mobileCountryCd
	return t
}

// SetMobileNetworkNum 设置移动网络号码
func (t *TerminalInfoDto) SetMobileNetworkNum(mobileNetworkNum string) *TerminalInfoDto {
	t.MobileNetworkNum = &mobileNetworkNum
	return t
}

// SetIccId 设置ICCID
func (t *TerminalInfoDto) SetIccId(iccId string) *TerminalInfoDto {
	t.IccId = &iccId
	return t
}

// SetLocationCd1 设置位置区域码 1
func (t *TerminalInfoDto) SetLocationCd1(locationCd1 string) *TerminalInfoDto {
	t.LocationCd1 = &locationCd1
	return t
}

// SetLbsNum1 设置基站编号 1
func (t *TerminalInfoDto) SetLbsNum1(lbsNum1 string) *TerminalInfoDto {
	t.LbsNum1 = &lbsNum1
	return t
}

// SetLbsSignal1 设置基站信号 1
func (t *TerminalInfoDto) SetLbsSignal1(lbsSignal1 string) *TerminalInfoDto {
	t.LbsSignal1 = &lbsSignal1
	return t
}

// SetLocationCd2 设置位置区域码 2
func (t *TerminalInfoDto) SetLocationCd2(locationCd2 string) *TerminalInfoDto {
	t.LocationCd2 = &locationCd2
	return t
}

// SetLbsNum2 设置基站编号 2
func (t *TerminalInfoDto) SetLbsNum2(lbsNum2 string) *TerminalInfoDto {
	t.LbsNum2 = &lbsNum2
	return t
}

// SetLbsSignal2 设置基站信号 2
func (t *TerminalInfoDto) SetLbsSignal2(lbsSignal2 string) *TerminalInfoDto {
	t.LbsSignal2 = &lbsSignal2
	return t
}

// SetLocationCd3 设置位置区域码 3
func (t *TerminalInfoDto) SetLocationCd3(locationCd3 string) *TerminalInfoDto {
	t.LocationCd3 = &locationCd3
	return t
}

// SetLbsNum3 设置基站编号 3
func (t *TerminalInfoDto) SetLbsNum3(lbsNum3 string) *TerminalInfoDto {
	t.LbsNum3 = &lbsNum3
	return t
}

// SetLbsSignal3 设置基站信号 3
func (t *TerminalInfoDto) SetLbsSignal3(lbsSignal3 string) *TerminalInfoDto {
	t.LbsSignal3 = &lbsSignal3
	return t
}

// SetTelecomSystemId 设置电信系统识别码
func (t *TerminalInfoDto) SetTelecomSystemId(telecomSystemId string) *TerminalInfoDto {
	t.TelecomSystemId = &telecomSystemId
	return t
}

// SetTelecomNetworkId 设置电信网络识别码
func (t *TerminalInfoDto) SetTelecomNetworkId(telecomNetworkId string) *TerminalInfoDto {
	t.TelecomNetworkId = &telecomNetworkId
	return t
}

// SetTelecomLbs 设置电信基站
func (t *TerminalInfoDto) SetTelecomLbs(telecomLbs string) *TerminalInfoDto {
	t.TelecomLbs = &telecomLbs
	return t
}

// SetTelecomLbsSignal 设置电信基站信号
func (t *TerminalInfoDto) SetTelecomLbsSignal(telecomLbsSignal string) *TerminalInfoDto {
	t.TelecomLbsSignal = &telecomLbsSignal
	return t
}

// ToJSON 转换为JSON字符串
func (t *TerminalInfoDto) ToJSON() (string, error) {
	data, err := json.Marshal(t)
	if err != nil {
		return "", err
	}
	return string(data), nil
}

// FromJSON 从JSON字符串创建实例
func (t *TerminalInfoDto) FromJSON(jsonStr string) error {
	return json.Unmarshal([]byte(jsonStr), t)
}
